Public key encryption is based on encryption algorithms that have two keys. A first key is used for encryption, and a second key is used for decryption. In such systems, there is a known algorithm that computes the second key given the first. However, without full knowledge of all the parameters, one cannot compute the first key given the second key. The first key is referred to as the “private key”, and the second key is referred to as the “public key”. In practice, either the private key or the public key may be used to encrypt data and/or software, with the other key used to decrypt it. In general, the private key must be kept private, but the public key may be provided to anyone. A variety of public key cryptographic schemes have been developed for the protection of data and/or software communicated over networks via messages.
Public key systems are used for not only encrypting messages, but also effectively “signing” messages, allowing the received party to authenticate the sender of the message. One can also use such public key systems to seal or render tamper-proof a message. In such event, the sender computes a message digest from the data and/or software using specially designed cryptographically strong digests designed for this purpose. The sender then uses the private key to encrypt the message digest, wherein this encrypted message digest is called a digital “signature”. The sender then packages the data and/or software, the message digest, and the public key together. The receiver may check for tampering by computing the message digest again, then decrypting the received message digest with the public key. If the recomputed and decrypted message digests are identical, there was no tampering of the data.
In the prior art, software such as pretty good privacy (PGP) software is often used to generate the aforementioned signature. Typically, this software must have direct access to a private key to create the signature. For example, a command such as “C:>pgp −ks data. file” is often used to accomplish this.
Unfortunately, the fact that such PGP software must have read access to the file system where the private key is stored means that the user running the PGP software must also have access to such data. In a typical working environment, multiple users may be alternating in the job of creating signatures. Unfortunately, this exposes the private key to theft.
The seriousness of such theft is exemplified in a situation involving wireless computers that are equipped with a public key “burned” in memory. In such a case, the security of the entire system may be compromised upon the theft of the private key, since there is no way of changing the public key in the wireless computers.
There is thus a need for a system of securely generating signatures without the risks associated with private key theft, especially in environments where the public key can not be changed in response to a compromise of the private key.